﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Modelo.Entidades;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Presentacion;

namespace Joel.Vishnu.SitioWeb
{
    public partial class Empleados : System.Web.UI.Page, IEmpleados
    {
        #region Atributos

        private EmpleadosPresentador presentador;

        #endregion

        #region Propiedades

        public Int32 EmpleadoId
        {
            get { return Convert.ToInt32(lblEmpleadoId.Text); }
        }

        public String Nombre
        {
            get { return txtNombre.Text; }
        }

        public String Apellido
        {
            get { return txtApellido.Text; }
        }

        public Int32 Dni
        {
            get { return Convert.ToInt32(txtDni.Text); }
        }

        public String Telefono
        {
            get { return txtTelefono.Text; }
        }

        public String Direccion
        {
            get { return txtDireccion.Text; }
        }

        public Int32 BarrioId
        {
            get { return Convert.ToInt32(ddBarrios.SelectedValue); }
        }

        public List<Barrio> ListaBarrios
        {
            set
            {
                ddBarrios.DataSource = value;
                ddBarrios.DataValueField = "Id";
                ddBarrios.DataTextField = "Nombre";
                ddBarrios.DataBind();
            }
        }

        public String Email
        {
            get { return txtEmail.Text; }
        }

        public Int32 GeneroId
        {
            get
            {
                if (radMasculino.Checked)
                    return Convert.ToInt32(EnumGenero.MASCULINO_ID);
                else
                    return Convert.ToInt32(EnumGenero.FEMENINO_ID);

            }
        }

        public DateTime FechaContratacion
        {
            get { return Convert.ToDateTime(txtFechaContratacion.Text); }
        }

        public DateTime FechaCumpleanos
        {
            get { return Convert.ToDateTime(txtFechaCumpleanos.Text); }
        }

        public Int32 EstadoCivilId
        {
            get { return Convert.ToInt32(ddEstadosCiviles.SelectedValue); }
        }

        public List<EstadoCivil> ListaEstadosCiviles
        {
            set
            {
                ddEstadosCiviles.DataSource = value;
                ddEstadosCiviles.DataValueField = "Id";
                ddEstadosCiviles.DataTextField = "Nombre";
                ddEstadosCiviles.DataBind();
            }
        }

        public String ContactoEmergenciaNombre
        {
            get { return txtContactoEmergenciaNombre.Text; }
        }

        public String ContactoEmergenciaTelefono
        {
            get { return txtContactoEmergenciaTelefono.Text; }
        }

        public Decimal Salario
        {
            get { return Convert.ToDecimal(txtSalario.Text.Replace("$", "")); }
        }

        public EnumEstado Estado
        {
            get
            {
                switch (lblEstado.Text)
                {
                    case "0":
                        return EnumEstado.NUEVO;
                    case "1":
                        return EnumEstado.MODIFICAR;
                    default:
                        return EnumEstado.ELIMINAR; ;
                }
            }
        }

        public List<Empleado> ListaEmpleados
        {
            set
            {
                grdEmpleados.DataSource = value;
                grdEmpleados.DataBind();
            }
        }

        #endregion

        #region Metodos

        private void HabilitarControles()
        {
            grdEmpleados.Enabled = !grdEmpleados.Enabled;

            txtNombre.Enabled = !txtNombre.Enabled;
            txtApellido.Enabled = !txtApellido.Enabled;
            txtDni.Enabled = !txtDni.Enabled;
            txtTelefono.Enabled = !txtTelefono.Enabled;
            txtDireccion.Enabled = !txtDireccion.Enabled;
            txtEmail.Enabled = !txtEmail.Enabled;
            txtFechaCumpleanos.Enabled = !txtFechaCumpleanos.Enabled;
            txtFechaContratacion.Enabled = !txtFechaContratacion.Enabled;
            txtContactoEmergenciaNombre.Enabled = !txtContactoEmergenciaNombre.Enabled;
            txtContactoEmergenciaTelefono.Enabled = !txtContactoEmergenciaTelefono.Enabled;
            txtSalario.Enabled = !txtSalario.Enabled;

            ddBarrios.Enabled = !ddBarrios.Enabled;

            radMasculino.Enabled = !radMasculino.Enabled;
            radFemenino.Enabled = !radFemenino.Enabled;

            ddEstadosCiviles.Enabled = !ddEstadosCiviles.Enabled;

            btnInsertar.Enabled = !btnInsertar.Enabled;
            btnModificar.Enabled = !btnModificar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;
        }

        private void LimpiarCampos()
        {
            txtNombre.Text = String.Empty;
            txtApellido.Text = String.Empty;
            txtDni.Text = String.Empty;
            txtTelefono.Text = String.Empty;
            txtDireccion.Text = String.Empty;
            txtEmail.Text = String.Empty;
            txtFechaCumpleanos.Text = String.Empty;
            txtFechaContratacion.Text = String.Empty;
            txtContactoEmergenciaNombre.Text = String.Empty;
            txtContactoEmergenciaTelefono.Text = String.Empty;
            txtSalario.Text = String.Empty;

            ddBarrios.SelectedIndex = 0;
            radMasculino.Checked = true;
            radFemenino.Checked = false;
            ddEstadosCiviles.SelectedIndex = 0;

            grdEmpleados.SelectedIndex = -1;
        }

        private void ActualizarDatos()
        {
            try
            {
                //txtApellido.Text = ((Literal)grdEmpleados.SelectedRow.Cells[1].Controls[1]).Text;
                //lblEmpleadoId.Text = ((Literal)grdEmpleados.SelectedRow.Cells[1].Controls[2]).Text;
                txtApellido.Text = grdEmpleados.SelectedRow.Cells[1].Text;
                txtNombre.Text = grdEmpleados.SelectedRow.Cells[2].Text;
                txtDni.Text = grdEmpleados.SelectedRow.Cells[3].Text;
                txtTelefono.Text = grdEmpleados.SelectedRow.Cells[4].Text;
                txtDireccion.Text = grdEmpleados.SelectedRow.Cells[5].Text;
                ddBarrios.SelectedItem.Text = grdEmpleados.SelectedRow.Cells[6].Text;
                txtEmail.Text = grdEmpleados.SelectedRow.Cells[7].Text;
                if (grdEmpleados.SelectedRow.Cells[8].Text == "Masculino")
                {
                    radMasculino.Checked = true;
                    radFemenino.Checked = false;
                }
                else
                {
                    radMasculino.Checked = false;
                    radFemenino.Checked = true;
                }
                txtFechaCumpleanos.Text = Convert.ToDateTime(grdEmpleados.SelectedRow.Cells[9].Text).ToShortDateString();
                txtFechaContratacion.Text = Convert.ToDateTime(grdEmpleados.SelectedRow.Cells[10].Text).ToShortDateString();
                ddEstadosCiviles.SelectedItem.Text = grdEmpleados.SelectedRow.Cells[11].Text;
                txtContactoEmergenciaNombre.Text = grdEmpleados.SelectedRow.Cells[12].Text;
                txtContactoEmergenciaTelefono.Text = grdEmpleados.SelectedRow.Cells[13].Text;
                txtSalario.Text = grdEmpleados.SelectedRow.Cells[14].Text;
                lblEmpleadoId.Text = grdEmpleados.SelectedRow.Cells[15].Text;
                lblBarrioId.Text = grdEmpleados.SelectedRow.Cells[16].Text;
                lblEstadoCivilId.Text = grdEmpleados.SelectedRow.Cells[17].Text;

                ddBarrios.SelectedValue = presentador.TraerBarrioPorId(Convert.ToInt32(lblBarrioId.Text)).Id.ToString();
                ddEstadosCiviles.SelectedValue = presentador.TraerEstadoCivilPorId(Convert.ToInt32(lblEstadoCivilId.Text)).Id.ToString();
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        #endregion

        #region Eventos

        protected void Page_Load(Object sender, EventArgs e)
        {
            try
            {
                presentador = new EmpleadosPresentador(this);
                if (!Page.IsPostBack)
                    presentador.Inicialiar();
                lblErrores.Text = String.Empty;
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnInsertar_Click(Object sender, EventArgs e)
        {
            lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.NUEVO_ID);
            HabilitarControles();
            LimpiarCampos();
            txtNombre.Focus();
        }

        protected void btnModificar_Click(Object sender, EventArgs e)
        {
            if (grdEmpleados.SelectedRow != null)
            {
                if (lblEmpleadoId.Text != Convert.ToString((Int32)EnumEmpleados.EMPLEADO_POR_DEFECTO))
                {
                    lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.MODIFICAR_ID);
                    HabilitarControles();
                    txtNombre.Focus();
                }
                else
                    lblErrores.Text = "No puede modificar un empleado por defecto.";
            }
            else
                lblErrores.Text = "Debe seleccionar un empleado.";
        }

        protected void btnEliminar_Click(Object sender, EventArgs e)
        {
            if (grdEmpleados.SelectedRow != null)
            {
                if (lblEmpleadoId.Text != Convert.ToString((Int32)EnumEmpleados.EMPLEADO_POR_DEFECTO))
                {
                    try
                    {
                        lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.ELIMINAR_ID);
                        presentador.Eliminar();
                        LimpiarCampos();
                        lblErrores.Text = "Empleado eliminado.";

                    }
                    catch (Exception ex)
                    {
                        lblErrores.Text = ex.Message;
                    }
                }
                else
                    lblErrores.Text = "No puede eliminar un empleado por defecto.";
            }
            else
                lblErrores.Text = "Debe seleccionar un empleado.";
        }

        protected void btnAceptar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Aceptar();
                HabilitarControles();
                LimpiarCampos();
                switch (lblEstado.Text)
                {
                    case "0":
                        lblErrores.Text = "Empleado ingresado.";
                        break;
                    case "1":
                        lblErrores.Text = "Empleado modificado.";
                        break;
                }
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnCancelar_Click(Object sender, EventArgs e)
        {
            HabilitarControles();
            LimpiarCampos();
        }

        protected void grdEmpleados_SelectedIndexChanged(Object sender, EventArgs e)
        {
            if (grdEmpleados.SelectedIndex != -1)
                ActualizarDatos();
            else
                LimpiarCampos();
        }

        #endregion
    }
}